/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import Excepciones.ExcepcionExisteNombreDiccionario;
import java.awt.Component;
import java.util.ArrayList;

/**
 *
 * @author Jose Luis Orta
 */
public class CIDiccionario {
    private VistaDiccionario vd;
    private ControladorDiccionario cd;
    private int kant,iant;
    
    
    public CIDiccionario () {
        kant=0;
        iant=0;
        cd = new ControladorDiccionario();
        vd = new VistaDiccionario(this);
        

    }

    public String getnomdic() {
        return "default";
    }

    public VistaDiccionario getVistaDiccionario(){
        return vd;
    }

    public Trie getTrie() {
        return cd.getTrie("default");
    }

    public void anadirPalabra () {
        String pal = vd.preguntarPalabra();
        boolean b = cd.AddPalabra(pal, "default");
        if (b)
        vd.anadirPalabraATabla(pal);
        else
        vd.mensaje("La palabra ya esta en el diccionario");
        
    }
    public void eliminarPalabra() {
        int row = vd.preguntarIndicePalabraSeleccionada();
        if (row<0) {
            vd.mensaje("Ninguna palabra seleccionada");
        } else {
            String pal = vd.preguntarPalabraSeleccionada();
            cd.BorrarPalabra(pal, "default");
            vd.eliminarFilaTabla(row);
        }
    }

    public void buscarPalabra(){
        String pal = vd.preguntarPalabra();
        int i = cd.GetIndicePalabra("default", pal); 
        if (i>=0){
            vd.seleccionarFila(i);
        } else {
            vd.mensaje("Palabra no encontrada");
        }
        //vd.seleccionarPalabra(pal);
        
    }
    public void noEncontradaPalabra(){
        vd.mensaje("No encontrada");
    }
    public void modificarPalabra(){
        String pal = vd.preguntarPalabra();
        int row = vd.preguntarIndicePalabraSeleccionada();
         if (row>=0){
        String sel = vd.preguntarPalabraSeleccionada();
            boolean b=cd.AddPalabra(pal, "default");
            if (b){
                cd.BorrarPalabra(sel, "default");
                vd.modificarFila(pal, row);
            } else {
                cd.BorrarPalabra(pal, "default");
                vd.mensaje("La palabra ya existe");
            }
            
            
        } else {
            vd.mensaje("Ninguna fila seleccionada");
        }
    }
    public void cargarDiccionario(Component cent){
        String ruta = vd.preguntarRuta(cent,"Cargar","Cargar diccionario");
   
        if (!ruta.equals("")){
            try {
                cd.NuevoDiccionario("default", ruta);
            } catch (ExcepcionExisteNombreDiccionario ex) {
                cd.BorrarDiccionario("default");
                try {
                    cd.NuevoDiccionario("default", ruta);
                    cd.ModificarPath("default", ruta);
                    vd.limpiar();
                } catch (ExcepcionExisteNombreDiccionario ex1) {
                    
                }
                
            }
                cd.CargarDiccionario("default");
                ArrayList<String> palabras = cd.DiccionarioEnString("default");
                vd.nuevaTabla(palabras.size());
                int k = vd.cuantasFilas();
                vd.rellenarIK(0, k, palabras.toArray(new String[0]));
                vd.cambiarADiccionario();
        }
    }
    public void salvarDiccionario(Component cent){
        if (!cd.ExisteNombreDiccionario("default")){
            vd.mensaje(cent,"No hay ningun diccionario");
        } else {
            String ruta = vd.preguntarRuta(cent, "Salvar", "Salvar diccionario");
            if (!ruta.equals("")){
                cd.ModificarPath("default", ruta);
                cd.GuardarDiccionario("default");
         
                vd.mensaje(cent,"Diccionario guardado");
            }
        }
    }

    public void crearDiccionario(String nom, String path) throws ExcepcionExisteNombreDiccionario {
        cd.NuevoDiccionario(nom,path);
    }

    public void crearDiccionario(){
        try {
            cd.NuevoDiccionario("default", null);
        } catch (ExcepcionExisteNombreDiccionario ex) {
            cd.BorrarDiccionario("default");
            try {
                cd.NuevoDiccionario("default", null);
            } catch (ExcepcionExisteNombreDiccionario ex1) {

            }
        }
        vd.limpiar();
        vd.cambiarADiccionario();

    }
    public void eliminarDiccinario(Component cent){
         if (!cd.ExisteNombreDiccionario("default")){
            vd.mensaje(cent,"No hay ningun diccionario");
        } else {
            cd.BorrarDiccionario("default");
            vd.limpiar();
            vd.cambiarANoDiccionario();
        }
    }
    public ControladorDiccionario getcont() {
        return cd;
    }


    
    public void creardic(String nom, String path) throws ExcepcionExisteNombreDiccionario {
        
        cd.NuevoDiccionario(nom, path);
   }
    public int getIndicePalabra(String pal){
        return cd.GetIndicePalabra("default", pal);
    }
    
    public String[] getPalabras(int i, int k){
        return cd.GetPalabras("default",i,k);
    }
    public void refrescarTabla(){
        int i,k;
        if (kant==0 && iant ==0){
            i=0;
            k=vd.cuantasFilas();
        } else {
            vd.borrarIK(iant,kant);
            i=vd.queFila();
            k=vd.cuantasFilas();

        }
        String[] s = getPalabras(i, k);
        vd.rellenarIK(i,k,s);
        kant=k;
        iant=i;
    }

}
